
package com.csz.model;

import com.csz.dao.Persistencia;
import java.sql.Blob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/* @author Arthur F. Zanona */
//

public class Imagem extends Persistencia {
    private static final long serialVersionUID = 1L;
    
    private String nome;
    private byte[] imgImagem;
    private String path;

    public Imagem(Integer id , String nome , byte[] imgImagem , String path ) {
        this.id = id;
        this.nome = nome;
        this.imgImagem = imgImagem;
        this.path = path;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public byte[] getImagem() {
        return imgImagem;
    }

    public void setImagem(byte[] imgImagem) {
        this.imgImagem = imgImagem;
    }

    public Imagem(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String imgNome) {
        this.nome = imgNome;
    }

    @Override
    public void salvar() {
        String namedQuery = this.getId() == null ? Inserir : Atualizar ;
        //----- params aqui
        List<Object> params = new ArrayList<Object>();
        //---- fim params
        if ( this.getId() != null ) params.add( this.getId() );
        PreparedStatement ps = createStatementNamedQuery(namedQuery, params);
        try {
            ps.execute();
        } catch (SQLException ex) {}
    }

    public static List<Object[]> consultarPorCategoriaItemId ( List<Object[]> itens ) {
        List<Object[]> lista = new ArrayList<Object[]>();
        List<Object> params = null;
        List<Object[]> retConsulta = null;
        for ( Object[] o : itens ) {
            // passando o id da cai
            params = Arrays.asList( new Object[] { o[0] } );
            retConsulta = Persistencia.consultarNamedQueryGenerica(Imagem.ConsultarPorCategoriaItemId , params );
            if ( retConsulta.size() != 0 ) {
                for ( Object[] ob : retConsulta ) {
                    lista.add( ob );
                }
            }
        }
        return lista;
    }
    public static Object consultar(Integer id) {
        List<Object> lista = Imagem.consultarNamedQuery(ConsultarPorId, Arrays.asList(new Object[]{id}));
        return lista.size() == 0 ? null : lista.get(0);
    }

    @Override
    public void remover() {
        PreparedStatement ps = createStatementNamedQuery(Remover, Arrays.asList( new Object[] { this.getId() } ));
        try {
            ps.execute();
        } catch (SQLException ex) {}
    }
    
    public static List<Object> consultar(){
        return Imagem.consultarNamedQuery(ConsultarTodos, Arrays.asList(new Object[]{}));
    }

   public static List<Object> consultarNamedQuery(String namedQuery, List params){
        PreparedStatement ps = createStatementNamedQuery( namedQuery, params );
        List<Object> lista = new ArrayList<Object>();
        try {
            ResultSet rs = ps.executeQuery();
            while ( rs.next() ) {
                Blob b = rs.getBlob("img_imagem");
                Imagem i = new Imagem(
                        rs.getInt("img_id") ,
                        rs.getString("img_nome"),
                        b == null ? null : b.getBytes(1, (int) b.length()) ,
                        rs.getString("img_path")
                );
                lista.add(i);
            }
        }
        catch (SQLException ex) {
            System.out.print(ex);
        }
        return lista;
    }

    // QUERY SQL --------------------------------------------------------------------------------------------------------------
    public static final String ConsultarTodos  = "SELECT usu_id,usu_login,usu_pass FROM usuario";
    public static final String ConsultarPorId = "SELECT img_id,img_nome,img_imagem,img_path FROM imagem WHERE img_id = ?";
    public static final String ConsultarPorCategoriaItemId = "SELECT img_id,img_nome,img_path,null as img_imagem  FROM categoria_item_imagem cii" +
                                                             " JOIN imagem img ON img.img_id = cii.cii_img_id and cii.cii_cai_id = ?;";
                                                             //" WHERE cii.cii_cai_id = ?;";
    
    private static final String Remover = "DELETE FROM .. WHERE .._id = ?";
    private static final String Atualizar = "UPDATE .. SET .. ";
    private static final String Inserir = "INSERT INTO .. (..) VALUES (?,?,..)";
    // FIM QUERY SQL --------------------------------------------------------------------------------------------------------------

}
